package com.trendytech.aidata.configuration;

import org.apache.flink.table.functions.ScalarFunction;
import java.nio.charset.StandardCharsets;

/**
 * FormatFiveMinuteFunction 是一个继承自 Flink 的 ScalarFunction 的自定义函数类。
 * 该函数的主要功能是将输入的时间字符串格式化为每五分钟一个间隔的时间字符串。
 */
public class FormatFiveMinuteFunction extends ScalarFunction {

    /**
     * eval 方法是该自定义函数的核心执行方法，用于处理输入的时间字符串。
     *
     * @param timestr 输入的时间字符串，假定其为 UTF-8 编码且长度足够包含分钟和秒的信息。
     * @return 格式化后的时间字符串，精确到每五分钟的间隔。
     */
    public String eval(String timestr) {
        // 将输入的时间字符串转换为 UTF-8 编码的字节数组
        byte[] originalEventTimeByte = timestr.getBytes(StandardCharsets.UTF_8);

        // 在 ASCII 编码中，字符 '0' 的字节码是 48，字符 '5' 的字节码是 53。
        // 这里检查时间字符串中表示分钟十位的字符对应的字节码
        if (originalEventTimeByte[15] >= 53) {
            // 如果分钟十位的字节码大于等于 '5' 的字节码，将分钟十位设置为 '5'
            originalEventTimeByte[15] = 53;
        } else {
            // 如果分钟十位的字节码小于 '5' 的字节码，将分钟十位设置为 '0'
            originalEventTimeByte[15] = 48;
        }

        // 将时间字符串中表示分钟个位和秒的字符对应的字节码设置为 '0'
        originalEventTimeByte[17] = 48;
        originalEventTimeByte[18] = 48;
//sdfasdf
        // 将处理后的字节数组转换回 UTF-8 编码的字符串，并截取前 19 个字符返回
        return new String(originalEventTimeByte, 0, 19, StandardCharsets.UTF_8);
    }
}